package br.gov.sjc.aluguelsocial;

import java.util.List;

import br.gov.sjc.adapter.TrabalhoOFRAdapter;
import br.gov.sjc.classes.NumeroSias;
import br.gov.sjc.classes.TrabalhoOFR;
import br.gov.sjc.dao.TrabalhoOFRDAO;
import br.gov.sjc.utils.Sair2;

import android.app.Activity;
import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;
/**
 * 
 * @author rodrigo.ramos
 * @tutorial http://escoladeandroid.blogspot.com.br/2012/02/android-criando-uma-agenda-de-contatos.html
 */
public class TrabalhoOFRmain extends Sair2{
	String TAG = "TrabalhoOFRmain";
	private static final int INCLUIR = 0;
    private static final int ALTERAR = 1;
    private TrabalhoOFRDAO lTrabalhoOFRdao; //inst�ncia responsável pela persist�ncia dos dados
    List<TrabalhoOFR> lstTrabalhoOFR;//lista de dados cadastrados no BD
    public static TrabalhoOFRAdapter adapter; //Adapter responsável por apresentar os dados na tela
    
    boolean blnShort = false;
    int Posicao = 0;    //determinar a Posição do TrabalhoOFR dentro da lista lstTrabalhoOFR
    //Pega o numero do Sias em uso atual
    NumeroSias ns = new NumeroSias();
	int NumSias = ns.getNumeroDaFamilia();
	int idMembroSias = ns.getNumeroDoMembroDaFamilia();
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.outrasfontes_lv);
        registerBaseActivityReceiver();
        
        lTrabalhoOFRdao = new TrabalhoOFRDAO(this);
        lTrabalhoOFRdao.open();
 
        lstTrabalhoOFR = lTrabalhoOFRdao.Consultar(NumSias,idMembroSias);
 
        adapter = new TrabalhoOFRAdapter(this, lstTrabalhoOFR);
        setListAdapter(adapter);
   
        registerForContextMenu(getListView());
    }
    public void btnNovo_click(View view)
    {
        try
        {
        	InserirTrabalhoOFR();
        }catch (Exception e) {
        	Log.e(TAG,"btnOFRVoltar_click - Erro : " + e.getMessage());
        }
    }   
    public void btnOFRVoltar_click(View view)
    {
        try
        {
        	Intent ittTIr = new Intent(getApplicationContext(), DocumentosActivity.class);
            setResult(Activity.RESULT_CANCELED);
            startActivity(ittTIr);
            
            finish();
        }catch (Exception e) {
        	Log.e(TAG,"btnOFRVoltar_click - Erro : " + e.getMessage());
        }
    }    
    public void btnOFRIr_click(View view)
    {
        try
        {
            //Quando for simplesmente cancelar a opera��o de inclusão
            //ou altera��o deve-se apenas informar o RESULT_CANCELED
            //e em seguida finalizar a Activity
            Intent ittTIr = new Intent(getApplicationContext(), GrupoFamiliarActivity.class);
            setResult(Activity.RESULT_CANCELED);
            startActivity(ittTIr);
            finish();
        }catch (Exception e) {
        	Log.e(TAG,"btnOFRIr_click - Erro : " + e.getMessage());
        }             
    }
    
    //Rotina executada quando finalizar a Activity TrabalhoOFRAct
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        TrabalhoOFR lTrabalhoOFR = null;
         
        try
        {
            super.onActivityResult(requestCode, resultCode, data);
            if (resultCode == Activity.RESULT_OK)
            {
                //obtem dados inseridos/alterados na Activity trabalhoofr
                lTrabalhoOFR = (TrabalhoOFR)data.getExtras().getSerializable("trabalhoofr");
                 
                //o valor do requestCode foi definido na fun��o startActivityForResult
                if (requestCode == INCLUIR)
                {
                    //verifica se digitou algo no valor
                    if (!lTrabalhoOFR.getValor().equals("")) 
                    {
                        //necessário abrir novamente o BD pois ele foi fechado no método onPause()
                    	lTrabalhoOFRdao.open();
                         
                        //insere o contato no Banco de Dados SQLite
                    	lTrabalhoOFRdao.inserir(lTrabalhoOFR);
                         
                        //insere o contato na lista de contatos em mem�ria
                    	lstTrabalhoOFR.add(lTrabalhoOFR);
                    }
                }else if (requestCode == ALTERAR){
                	lTrabalhoOFRdao.open();
                    //atualiza o contato no Banco de Dados SQLite
                	lTrabalhoOFRdao.alterar(lTrabalhoOFR);
                     
                    //atualiza o contato na lista de contatos em mem�ria
                	lstTrabalhoOFR.set(Posicao, lTrabalhoOFR);
                }
                 
                //método responsável pela atualiza da lista de dados na tela
                adapter.notifyDataSetChanged();
            }
        }
        catch (Exception e) {
            Log.e(TAG,"onActivityResult - Erro : " + e.getMessage());
        }        
    }
    
    private void InserirTrabalhoOFR(){
        try
        {
            //a vari�vel "tipo" tem a fun��o de definir o comportamento da Activity
            //ContatoUI, agora a vari�vel tipo está definida com o valor "0" para
            //informar que ser� uma inclusão de Contato
             
            Intent it = new Intent(this, TrabalhoOFRActivity.class);
            it.putExtra("tipo", INCLUIR);
            startActivityForResult(it, INCLUIR);//chama a tela e inclusão
        }
        catch (Exception e) {
        	Log.e(TAG,"InserirTrabalhoOFR - Erro : " + e.getMessage());
        }            
    }  
    @Override
    protected void onResume() {
        //quando a Activity main receber o foco novamente abre-se novamente a conexão
    	lTrabalhoOFRdao.open();
        //método responsável pela atualiza da lista de dados na tela
        adapter.notifyDataSetChanged();
        super.onResume();
    }
    @Override
    protected void onPause() {
        //toda vez que o programa peder o foco fecha-se a conexão com o BD
    	lTrabalhoOFRdao.close();
        super.onPause();
    }
    
    @Override   
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {        
        try
        {
            //Criação do popup menu com as op��es que termos sobre
            //nossos Contatos
             
            AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)menuInfo;
            if (!blnShort)
            {
                Posicao = info.position;
            }
            blnShort = false;
             
            menu.setHeaderTitle("Selecione:");            
            //a origem dos dados do menu está definido no arquivo arrays.xml 
            String[] menuItems = getResources().getStringArray(R.array.menu);             
            for (int i = 0; i<menuItems.length; i++) {                
                menu.add(Menu.NONE, i, i, menuItems[i]);            
            }        
        }catch (Exception e) {
        	Log.e(TAG,"onCreateContextMenu - Erro : " + e.getMessage());
        }            
    }  
    //Este método � disparado quando o usu�rio clicar em um item do ContextMenu
    @Override   
    public boolean onContextItemSelected(MenuItem item) {       
        TrabalhoOFR ltrabalhoOFR = null;
        try
        {
            int menuItemIndex = item.getItemId();        
 
            //Carregar a inst�ncia POJO com a Posição selecionada na tela
            ltrabalhoOFR = (TrabalhoOFR) getListAdapter().getItem(Posicao);
             
            if (menuItemIndex == 0){
                //Carregar a Activity ContatoUI com o registro selecionado na tela
                 
                Intent it = new Intent(this, TrabalhoOFRActivity.class);
                it.putExtra("tipo", ALTERAR);
                it.putExtra("trabalhoofr", ltrabalhoOFR);
                startActivityForResult(it, ALTERAR); //chama a tela de altera��o
              //método responsável pela atualiza da lista de dados na tela
                adapter.notifyDataSetChanged();
            }else if (menuItemIndex == 1){
                //Excluir do Banco de Dados e da tela o registro selecionado
                 
            	lTrabalhoOFRdao.Excluir(ltrabalhoOFR);
                lstTrabalhoOFR.remove(ltrabalhoOFR);
                adapter.notifyDataSetChanged(); //atualiza a tela
            }
        }catch (Exception e) {
        	Log.e(TAG,"Erro : " + e.getMessage());
        }   
        return true;   
         
    } 
    @Override
    protected void onListItemClick(ListView lofr, View v, int position, long id) {
       try{
    	   super.onListItemClick(lofr, v, position, id);
           //por padr�o o ContextMenu, s� � executado atrav�s de LongClick, mas
           //nesse caso toda vez que executar um ShortClick, abriremos o menu
           //e tamb�m guardaremos qual a Posição do itm selecionado
           
           Posicao = position;
           blnShort = true;
           this.openContextMenu(lofr);
       }catch(Exception e){
    	   Log.e(TAG,"onListItemClick ERRO :" + e.getMessage()+"/"+e.getCause());
           
       }
       Log.i(TAG,"onListItemClick fim");
    }

    @Override
    protected void onDestroy() {
    	super.onDestroy();
    	unRegisterBaseActivityReceiver();
    }}
